package capitulo3;

import java.awt.Dimension;
import java.util.Date;

/**
 * Literales, asignaciones y variables (Objetivos 1.3 y 7.6)
 * 
 * 1.3 Desarrolar un codigo que declare, inicialice y use datos primitivos,
 * arrays, enumeraciones y objetos estaticos, instancias y variables locales.
 * Tambien usa identificadores validos para los nombres de las variables.
 * 
 * 7.6 Escribir codigo que aplique correctamente los operadores apropiados
 * incluyendo los operadores de asignacion (limitado a =, +=, -=)...
 */

public class Tema19_Literales02 {

	public static void main(String[] args) {

		/* Locales (stack, automaticos) primitivos y objetos */

		// int year = 2050;
		int year; // La varibles locales deben ser siempre, siempre inicilizadas
		int dia; // variable no esta siendo utilizada, por eso no da error
		year = 2030; // Corregimos
		System.out.println("Locales (stack, automaticos) primitivos y objetos");
		System.out.println("The year is: " + year);

		/* Referencias a objetos locales */

		Date date;
		// if (date == null) //Variable date may not have been initialized.
		System.out.println("\nReferencias a objetos locales");
		System.out.println("date is null");

		/* Asignando una variable de referencia a otra variable de referencia */

		Dimension a = new Dimension(5, 10);
		System.out.println("\nAsignando una variable de referencia a otra variable de referencia");
		System.out.println("a.height = " + a.height);
		Dimension b = a;
		b.height = 30;
		System.out.println("a.height = " + a.height + " after change to b");

		
		/*
		 * Una excepcion para los objetos referenciados de tipo String.Los
		 * objetos de cadena son inmutables, no puedes cambiar el valor de un
		 * objeto String (mas de esto en el capitulo 6). Pero a simple vista
		 * parece que se puede, miremos este codigo:
		 */
		
		String x = "Java"; // Assign a value to x
        String y = x; // Now y and x refer to the same
                        // String object
        System.out.println("\nObjetos referenciados de tipo String");                 
        System.out.println("y string = " + y);
        x = x + " Bean"; // Now modify the object using
        // the x reference
        System.out.println("y string = " + y);
	}

}
